package auth

import (
	"fmt"
	"galaxy-manage/internal/code"
	"galaxy-manage/internal/models/constant"
	"github.com/mojocn/base64Captcha"
	"image/color"
	"time"
)

type CaptchaResult struct {
	VerifyCodeKey    string `json:"verifyCodeKey"`
	VerifyCodeBase64 string `json:"verifyCodeBase64"`
}

func (s *service) GetCaptchaResult() *CaptchaResult {
	store := base64Captcha.DefaultMemStore
	// 生成验证码
	// 80, 240, 5, 0.7, 5
	//dDigit := base64Captcha.NewDriverDigit(80, 240, 5, 0.7, 5)
	height := 60    //高度
	width := 200    //宽度
	noiseCount := 0 //验证码图片中背景噪点的数量，用于增加识别难度。
	showLineOptions := base64Captcha.OptionShowHollowLine
	bgColor := &color.RGBA{R: 144, G: 238, B: 144, A: 255} // 设置背景色为浅绿色
	fonts := []string{"wqy-microhei.ttc"}                  // 字体文件路径，确保路径正确
	// 创建数学运算类型验证码的Driver
	driver := base64Captcha.NewDriverMath(
		height,
		width,
		noiseCount,
		showLineOptions,
		bgColor,
		nil,
		fonts,
	)
	captcha := base64Captcha.NewCaptcha(driver, store)
	// 生成验证码
	id, b64s, answer, err := captcha.Generate()
	if err != nil {
		fmt.Println("验证码生成失败:", err)
		panic(code.NewErr("验证码生成失败"))
	}
	// 存储图形验证码
	s.cache.Set(constant.VERIFY_CODE_CACHE_PREFIX+id, answer, 1*time.Minute)
	// 可选：将验证码图片保存到文件（仅用于演示）
	// 注意：在生产环境中，你通常不会将验证码图片保存到服务器
	return &CaptchaResult{
		VerifyCodeKey:    id,
		VerifyCodeBase64: b64s,
	}
}
